home *** CD-ROM | disk | FTP | other *** search
/ Aminet 41 / Aminet 41 (2001)(Schatztruhe)[!][Feb 2001].iso / Aminet / comm / tcp / samba_2.0.7.lha / source / amiga_rcs / Assert.c < prev    next >
C/C++ Source or Header  |  2000-12-25  |  8KB  |  440 lines

  1. head    1.3;
  2. access;
  3. symbols
  4.     V1_19:1.3
  5.     V1_18:1.2
  6.     V1_15:1.2
  7.     V1_12:1.1
  8.     V1_11:1.1
  9.     V1_10:1.1
  10.     V1_9:1.1
  11.     V1_8:1.1
  12.     V1_7:1.1
  13.     V1_6:1.1
  14.     V1_5:1.1
  15.     V1_4:1.1
  16.     V1_3:1.1
  17.     V1_2:1.1
  18.     V1_1:1.1;
  19. locks
  20.     olsen:1.3; strict;
  21. comment    @ * @;
  22.  
  23.  
  24. 1.3
  25. date    2000.12.25.11.49.15;    author olsen;    state Exp;
  26. branches;
  27. next    1.2;
  28.  
  29. 1.2
  30. date    2000.05.22.19.10.25;    author olsen;    state Exp;
  31. branches;
  32. next    1.1;
  33.  
  34. 1.1
  35. date    99.02.06.12.18.32;    author olsen;    state Exp;
  36. branches;
  37. next    ;
  38.  
  39.  
  40. desc
  41. @.
  42. @
  43.  
  44.  
  45. 1.3
  46. log
  47. @.
  48. @
  49. text
  50. @/*
  51.  * $Id: Assert.c 1.2 2000/05/22 19:10:25 olsen Exp olsen $
  52.  *
  53.  * :ts=8
  54.  *
  55.  * AmigaOS wrapper routines for Samba 2.0.0, using the AmiTCP V3 API
  56.  * and the SAS/C V6.58 compiler.
  57.  *
  58.  * Copyright (C) 1999-2000 by Olaf `Olsen' Barthel <olsen@@sourcery.han.de>
  59.  *
  60.  * This program is free software; you can redistribute it and/or modify
  61.  * it under the terms of the GNU General Public License as published by
  62.  * the Free Software Foundation; either version 2 of the License, or
  63.  * (at your option) any later version.
  64.  * 
  65.  * This program is distributed in the hope that it will be useful,
  66.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  67.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  68.  * GNU General Public License for more details.
  69.  * 
  70.  * You should have received a copy of the GNU General Public License
  71.  * along with this program; if not, write to the Free Software
  72.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  73.  */
  74.  
  75. /****************************************************************************/
  76.  
  77. #include <dos/dos.h>
  78.  
  79. #include <clib/exec_protos.h>
  80. #include <clib/dos_protos.h>
  81.  
  82. #include <pragmas/exec_pragmas.h>
  83. #include <pragmas/dos_pragmas.h>
  84.  
  85. #include <string.h>
  86.  
  87. extern struct Library * SysBase;
  88.  
  89. extern void kprintf(const char *,...);
  90. extern void __stdargs kputc(char c);
  91.  
  92. /****************************************************************************/
  93.  
  94. #include <stdarg.h>
  95.  
  96. /****************************************************************************/
  97.  
  98. #define DEBUGLEVEL_OnlyAsserts    0
  99. #define DEBUGLEVEL_Reports    1
  100. #define DEBUGLEVEL_CallTracing    2
  101.  
  102. /****************************************************************************/
  103.  
  104. static int indent_level = 0;
  105. static int debug_level = DEBUGLEVEL_CallTracing;
  106.  
  107. static char program_name[40];
  108. static int program_name_len = 0;
  109.  
  110. /****************************************************************************/
  111.  
  112. void
  113. _SETPROGRAMNAME(char *name)
  114. {
  115.     if(name != NULL && name[0] != '\0')
  116.     {
  117.         program_name_len = strlen(name);
  118.         if(program_name_len >= sizeof(program_name))
  119.             program_name_len = sizeof(program_name)-1;
  120.  
  121.         strncpy(program_name,name,program_name_len);
  122.         program_name[program_name_len] = '\0';
  123.     }
  124.     else
  125.     {
  126.         program_name_len = 0;
  127.     }
  128. }
  129.  
  130. /****************************************************************************/
  131.  
  132. int
  133. _SETDEBUGLEVEL(int level)
  134. {
  135.     int old_level = debug_level;
  136.  
  137.     debug_level = level;
  138.  
  139.     return(old_level);
  140. }
  141.  
  142. /****************************************************************************/
  143.  
  144. static int previous_debug_level = -1;
  145.  
  146. void
  147. _PUSHDEBUGLEVEL(int level)
  148. {
  149.     previous_debug_level = _SETDEBUGLEVEL(level);
  150. }
  151.  
  152. void
  153. _POPDEBUGLEVEL(void)
  154. {
  155.     if(previous_debug_level != -1)
  156.     {
  157.         _SETDEBUGLEVEL(previous_debug_level);
  158.  
  159.         previous_debug_level = -1;
  160.     }
  161. }
  162.  
  163. /****************************************************************************/
  164.  
  165. void
  166. _INDENT(void)
  167. {
  168.     if(program_name_len > 0)
  169.         kprintf("(%s) ",program_name);
  170.  
  171.     if(debug_level >= DEBUGLEVEL_CallTracing)
  172.     {
  173.         int i;
  174.  
  175.         for(i = 0 ; i < indent_level ; i++)
  176.             kprintf("   ");
  177.     }
  178. }
  179.  
  180. /****************************************************************************/
  181.  
  182. void
  183. _SHOWVALUE(
  184.     unsigned long value,
  185.     int size,
  186.     const char *name,
  187.     const char *file,
  188.     int line)
  189. {
  190.     if(debug_level >= DEBUGLEVEL_Reports)
  191.     {
  192.         char *fmt;
  193.  
  194.         switch(size)
  195.         {
  196.             case 1:
  197.     
  198.                 fmt = "%s:%ld:%s = %ld, 0x%02lx";
  199.                 break;
  200.     
  201.             case 2:
  202.     
  203.                 fmt = "%s:%ld:%s = %ld, 0x%04lx";
  204.                 break;
  205.     
  206.             default:
  207.     
  208.                 fmt = "%s:%ld:%s = %ld, 0x%08lx";
  209.                 break;
  210.         }
  211.     
  212.         _INDENT();
  213.     
  214.         kprintf(fmt,file,line,name,value,value);
  215.     
  216.         if(size == 1 && value < 256)
  217.         {
  218.             if(value < ' ' || (value >= 127 && value < 160))
  219.                 kprintf(", '\\x%02lx'",value);
  220.             else
  221.                 kprintf(", '%lc'",value);
  222.         }
  223.     
  224.         kprintf("\n");
  225.     }
  226. }
  227.  
  228. /****************************************************************************/
  229.  
  230. void
  231. _SHOWSTRING(
  232.     const char *string,
  233.     const char *name,
  234.     const char *file,
  235.     int line)
  236. {
  237.     if(debug_level >= DEBUGLEVEL_Reports)
  238.     {
  239.         _INDENT();
  240.         kprintf("%s:%ld:%s = 0x%08lx \"%s\"\n",file,line,name,string,string);
  241.     }
  242. }
  243.  
  244. /****************************************************************************/
  245.  
  246. void
  247. _SHOWMSG(
  248.     const char *string,
  249.     const char *file,
  250.     int line)
  251. {
  252.     if(debug_level >= DEBUGLEVEL_Reports)
  253.     {
  254.         _INDENT();
  255.         kprintf("%s:%ld:%s\n",file,line,string);
  256.     }
  257. }
  258.  
  259. /****************************************************************************/
  260.  
  261. void
  262. _DPRINTF_HEADER(
  263.     const char *file,
  264.     int line)
  265. {
  266.     if(debug_level >= DEBUGLEVEL_Reports)
  267.     {
  268.         _INDENT();
  269.         kprintf("%s:%ld:",file,line);
  270.     }
  271. }
  272.  
  273. static void __asm
  274. putch(register __d0 c)
  275. {
  276.     if(c != '\0')
  277.         kputc(c);
  278. }
  279.  
  280. void
  281. _DPRINTF(const char *fmt,...)
  282. {
  283.     if(debug_level >= DEBUGLEVEL_Reports)
  284.     {
  285.         va_list args;
  286.  
  287.         va_start(args,fmt);
  288.         RawDoFmt((char *)fmt,args,(VOID (*)())putch,NULL);
  289.         va_end(args);
  290.  
  291.         kprintf("\n");
  292.     }
  293. }
  294.  
  295. /****************************************************************************/
  296.  
  297. void
  298. _ENTER(
  299.     const char *file,
  300.     int line,
  301.     const char *function)
  302. {
  303.     if(debug_level >= DEBUGLEVEL_CallTracing)
  304.     {
  305.         _INDENT();
  306.         kprintf("%s:%ld:Entering %s\n",file,line,function);
  307.     }
  308.  
  309.     indent_level++;
  310. }
  311.  
  312. void
  313. _LEAVE(
  314.     const char *file,
  315.     int line,
  316.     const char *function)
  317. {
  318.     indent_level--;
  319.  
  320.     if(debug_level >= DEBUGLEVEL_CallTracing)
  321.     {
  322.         _INDENT();
  323.         kprintf("%s:%ld: Leaving %s\n",file,line,function);
  324.     }
  325. }
  326.  
  327. void
  328. _RETURN(
  329.     const char *file,
  330.     int line,
  331.     const char *function,
  332.     unsigned long result)
  333. {
  334.     indent_level--;
  335.  
  336.     if(debug_level >= DEBUGLEVEL_CallTracing)
  337.     {
  338.         _INDENT();
  339.         kprintf("%s:%ld: Leaving %s (result 0x%08lx, %ld)\n",file,line,function,result,result);
  340.     }
  341. }
  342.  
  343. /****************************************************************************/
  344.  
  345. void
  346. _ASSERT(
  347.     int x,
  348.     const char *xs,
  349.     const char *file,
  350.     int line,
  351.     const char *function)
  352. {
  353.     #ifdef CONFIRM
  354.     {
  355.         STATIC BOOL ScrollMode    = FALSE;
  356.         STATIC BOOL BatchMode    = FALSE;
  357.     
  358.         if(BatchMode == FALSE)
  359.         {
  360.             if(x == 0)
  361.             {
  362.                 kprintf("%s:%ld:Expression `%s' failed assertion in %s().\n",
  363.                         file,
  364.                         line,
  365.                         xs,
  366.                         function);
  367.     
  368.                 if(ScrollMode == FALSE)
  369.                 {
  370.                     ULONG Signals;
  371.     
  372.                     SetSignal(0,SIGBREAKF_CTRL_C | SIGBREAKF_CTRL_D | SIGBREAKF_CTRL_E);
  373.     
  374.                     kprintf(" ^C to continue, ^D to enter scroll mode, ^E to enter batch mode\r");
  375.     
  376.                     Signals = Wait(SIGBREAKF_CTRL_C | SIGBREAKF_CTRL_D | SIGBREAKF_CTRL_E);
  377.     
  378.                     if(Signals & SIGBREAKF_CTRL_D)
  379.                     {
  380.                         ScrollMode = TRUE;
  381.     
  382.                         kprintf("Ok, entering scroll mode\033[K\n");
  383.                     }
  384.                     else if (Signals & SIGBREAKF_CTRL_E)
  385.                     {
  386.                         BatchMode = TRUE;
  387.     
  388.                         kprintf("Ok, entering batch mode\033[K\n");
  389.                     }
  390.                     else
  391.                     {
  392.                         /* Continue */
  393.     
  394.                         kprintf("\033[K\r");
  395.                     }
  396.                 }
  397.             }
  398.         }
  399.     }
  400.     #else
  401.     {
  402.         if(x == 0)
  403.         {
  404.             _INDENT();
  405.             kprintf("%s:%ld:Expression `%s' failed assertion in %s().\n",
  406.                     file,
  407.                     line,
  408.                     xs,
  409.                     function);
  410.         }
  411.     }
  412.     #endif    /* CONFIRM */
  413. }
  414. @
  415.  
  416.  
  417. 1.2
  418. log
  419. @.
  420. @
  421. text
  422. @d2 1
  423. a2 1
  424.  * $Id: Assert.c 1.1 1999/02/06 12:18:32 olsen Exp olsen $
  425. d6 1
  426. a6 1
  427.  * AmigaOS wrapper routines for Samba 2.0.0, using the AmiTCP V4 API
  428. @
  429.  
  430.  
  431. 1.1
  432. log
  433. @.
  434. @
  435. text
  436. @d9 1
  437. a9 1
  438.  * Copyright (C) 1999 by Olaf `Olsen' Barthel <olsen@@sourcery.han.de>
  439. @
  440.